<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <button id="btn"></button>
</body>
<script>
  // 创建函数的方式:
  // 1. 命名函数   (声明式)
  // 2. 匿名函数
  //    a. 存储到变量 数组 对象中  (赋值时 var add = )
  //    b. 匿名函数的自调用
  //    c. 官方给定构造函数创建  (了解)


  // 命名函数  
  // function add(a,b){
  //     return a + b;
  // }
  // console.log(add);
  // console.log(add(1,2));

  // var btn = document.getElementById("btn");
  // btn.onclick = function(){
  //     alert(1111)
  // }

  // 匿名函数
  // var add = function(a,b){
  //     return a + b;
  // }

  // 报错: Function statements require a function name (函数语句需要函数名)
  // js在解读函数是默认是以命名函数的格式解读的  => 不允许直接声明匿名函数
  // function(a,b){
  //     return a + b;
  // }

  // 怎么解决?   
  // 1. 将匿名函数存储到 变量 数组 对象 等数据中  (函数表达式)

  // var add = function(a,b){  //将函数 存储到变量中
  //     return a + b;
  // }
  // console.log(add);
  // console.log(add(1,2));

  // var btn = document.getElementById("btn");
  // btn.onclick = function(){  //将函数存储到对象中  按钮.onclick = 
  //     alert(1111)
  // }

  // 2. 通过添加() + - ! 优先级, js在解读时 会解析为匿名函数, 此时如果向执行函数需要通过 添加()让函数自执行 (匿名函数的自调用/自执行   自执行函数)
  // 缺点:每个函数只能执行一次,

  // (function(a,b){
  //     return a + b;
  // })
  // +function(a,b){
  //     return a + b;
  // };
  // -function(a,b){
  //     return a + b;
  // };
  // !function(a,b){
  //     return a + b;
  // };
  // // console.log(function(a,b){
  // //     return a + b;
  // // });

  // (function(a,b){
  //     console.log("执行函数",a,b);
  //     return a + b;
  // })(1,2);
  // +function(a,b){
  //     console.log("执行函数",a,b);
  //     return a + b;
  // }(100,200);


  // 3. 通过官方给定的构造函数创建函数(匿名函数)  
  //  了解即可  => 创建速度较慢,站内存 较大

  // function(a,b){
  //     return a + b;
  // }
  // "a","b"  => 函数的形参 a,b
  // "return a+b"   => 函数调用时执行的语句
  var add = new Function("a", "b", "return a+b");
  console.log(add);
  console.log(add(100, 2000));







</script>

</html>